home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Systemmonitors / SWAP / PatchSignaling.s next >
Text File  |  1996-09-26  |  3KB  |  129 lines

  1.  
  2.  ;PatchSignaling.s .Copyright © Kamran Karimi.It Patches the EXEC functions
  3.  ;PutMsg() and Signal() to prevent them of awakening a swapped out program.
  4.  ;Assembled with Cape. Should be linked with SWAP.o to produce executable
  5.  
  6.  
  7. ExecBase equ 4
  8. AllocMem equ -198
  9. FreeMem  equ -210
  10. Signal   equ -322
  11. PutMsg   equ -364
  12.  
  13.  
  14.  XDEF _PatchSignaling
  15.  XDEF _ReservedSignal
  16.  XDEF _ReservedPutMsg
  17.  XDEF _SignalAddr
  18.  XDEF _PutMsgAddr
  19.  XDEF _SaveSignal
  20.  XDEF _SavePutMsg
  21.  XDEF _SizeOfPatchSignal
  22.  XDEF _SizeOfPatchPutMsg
  23.  
  24. _PatchSignaling:
  25.  move.l  a6,-(a7)
  26.  move.l  ExecBase,a6
  27.  adda.l  #Signal,a6
  28.  move.l  a6,_SignalAddr
  29.  move.l  ExecBase,a6
  30.  adda.l  #PutMsg,a6
  31.  move.l  a6,_PutMsgAddr
  32.  move.l  ExecBase,a6
  33.  move.l  Signal(a6),_SaveSignal
  34.  move.l  PutMsg(a6),_SavePutMsg
  35.  move.l  #EndePatchSignal-BeginPatchSignal,d0
  36.  move.l  d0,_SizeOfPatchSignal
  37.  move.l  #$10001,d1
  38.  jsr     AllocMem(a6)
  39.  move.l  d0,_ReservedSignal
  40.  beq     End_Main
  41.  move.l  #EndePatchPutMsg-BeginPatchPutMsg,d0
  42.  move.l  d0,_SizeOfPatchPutMsg
  43.  move.l  #$10001,d1
  44.  jsr     AllocMem(a6)
  45.  move.l  d0,_ReservedPutMsg
  46.  bne     MemAllocated
  47.  move.l  _ReservedSignal,a1
  48.  move.l  _SizeOfPatchSignal,d0
  49.  jsr     FreeMem(a6)
  50.  bra     End_Main
  51. MemAllocated: 
  52.  move.l  Signal(a6),_SavePatchSignal
  53.  move.l  #BeginPatchSignal,a0
  54.  move.l  _ReservedSignal,a1
  55.  move.l  _SizeOfPatchSignal,d0
  56.  divu    #2,d0
  57.  subi.l  #1,d0
  58. lop1:
  59.  move.w  (a0)+,(a1)+
  60.  dbra    d0,lop1
  61.  move.l  _ReservedSignal,Signal(a6)
  62.  
  63.  move.l  PutMsg(a6),_SavePatchPutMsg
  64.  move.l  #BeginPatchPutMsg,a0
  65.  move.l  _ReservedPutMsg,a1
  66.  move.l  _SizeOfPatchPutMsg,d0
  67.  divu    #2,d0
  68.  subi.l  #1,d0
  69. lop2:
  70.  move.w  (a0)+,(a1)+
  71.  dbra    d0,lop2
  72.  move.l  _ReservedPutMsg,PutMsg(a6)
  73.  moveq   #0,d0
  74.  bra     Payan
  75. End_Main:
  76.  move.l  #10,d0
  77. Payan:             ;in Persian (Parsi or Farsi, as we call it) means end
  78.  move.l ExecBase,a6
  79.  move.l (a7)+,a6
  80.  rts
  81.  
  82. _ReservedSignal:    dc.l 0
  83. _ReservedPutMsg:    dc.l 0
  84. _SizeOfPatchSignal: dc.l 0
  85. _SizeOfPatchPutMsg: dc.l 0
  86. _SignalAddr:        dc.l 0
  87. _PutMsgAddr:        dc.l 0
  88. _SaveSignal:        dc.l 0
  89. _SavePutMsg:        dc.l 0
  90.  
  91.  
  92. BeginPatchSignal:
  93.  movem.l d1/a1,-(a7)
  94.  move.b  15(a1),d1
  95.  cmp.b   #9,d1
  96.  bne     GoOnSignal
  97.  movem.l (a7)+,d1/a1
  98.  rts 
  99.  
  100. GoOnSignal:
  101.  movem.l (a7)+,d1/a1
  102.  move.l  _SavePatchSignal(pc),-(a7)
  103.  rts
  104.  
  105.  
  106. _SavePatchSignal:  dc.l 0
  107.  
  108. EndePatchSignal:
  109.  
  110.  
  111. BeginPatchPutMsg:
  112.  movem.l d0/a0,-(a7)
  113.  move.l  16(a0),a0
  114.  move.b  15(a0),d0
  115.  cmp.b   #9,d0
  116.  bne     GoOnPutMsg
  117.  movem.l (a7)+,d0/a0
  118.  rts 
  119.  
  120. GoOnPutMsg:
  121.  movem.l (a7)+,d0/a0
  122.  move.l  _SavePatchPutMsg(pc),-(a7)
  123.  rts
  124.  
  125.  
  126. _SavePatchPutMsg:  dc.l 0
  127.  
  128. EndePatchPutMsg:
  129.